using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

using DataTransferObject;
using Business;

namespace Presentation
{
    public partial class FrmSach : Form
    {
        BindingSource bs = new BindingSource();
        clsSachDTO SachDTO = new clsSachDTO();
        clsThuThuBUS ThuThuBUS = new clsThuThuBUS();
        clsTuaSachDTO TuaSachDTO = new clsTuaSachDTO();
        clsTuaSachBUS TuaSachBUS = new clsTuaSachBUS();
        DataTable tbl = new DataTable();

        public static String MaTuaSachTrenForm;
        public static String MaTuaSachThemMoi;
        public static String MaSachTrenForm;

        public FrmSach()
        {
            InitializeComponent();
        }

        #region Events show Childs form.
        private void btntheloai_Click(object sender, EventArgs e)
        {
            FrmTheLoai frmtheloai = new FrmTheLoai();
            frmtheloai.Show();            
        }

        private void btnnhaxb_Click(object sender, EventArgs e)
        {
            FrmNhaXuatBan frmnhaxb = new FrmNhaXuatBan();
            frmnhaxb.Show();
        }

        private void btntacgia_Click(object sender, EventArgs e)
        {
            FrmTacGia frmtacgia = new FrmTacGia();
            frmtacgia.Show();
        }

        private void btnngonngu_Click(object sender, EventArgs e)
        {
            FrmNgonNgu frmngonngu = new FrmNgonNgu();
            frmngonngu.Show();
        }

        private void btnkesach_Click(object sender, EventArgs e)
        {
            FrmKe frmke = new FrmKe();
            frmke.Show();
        }

        private void btnsachhong_Click(object sender, EventArgs e)
        {
            FrmSachHong frmhong = new FrmSachHong();
            frmhong.Show();
        }
        #endregion

        #region Phương thức đưa dữ liệu lên form.

        //Phương thức đưa dữ liệu lên form.
        private void LoadForm()
        {
            HienThiTextBox(false);
            HienThiButton(true);
            btnluu.Enabled = false;
            btnchonhinh.Enabled = false;

            LoadAllComboBox();
            bs.DataSource = ThuThuBUS.SachBUS.DanhSachSachReference();
            bdntuasach.BindingSource = bs;
            dgvtuasach.DataSource = bs;
            TaoCotGridView();
        }

        //Phương thức đưa tình trạng lên form.
        private void DuaTinhTrangLenForm()
        {
            DataTable dt;
            clsSachHongBUS SachHongBUS;

            dt = new DataTable();
            SachHongBUS = new clsSachHongBUS();
            dt = SachHongBUS.DanhSachSachHong();
            cbosachhong.DataSource = dt;
            cbosachhong.DisplayMember = "TENHONG";
            cbosachhong.ValueMember = "MAHONG";
        }

        //Phương thức đưa nhà xuất bản lên form.
        private void DuaNhaXuatBanLenForm()
        {
            DataTable dt;
            clsNhaXBBUS NhaXBBUS;

            dt = new DataTable();
            NhaXBBUS = new clsNhaXBBUS();
            dt = NhaXBBUS.DanhSachNhaXB();
            cbonhxb.DataSource = dt;
            cbonhxb.DisplayMember = "TENNXB";
            cbonhxb.ValueMember = "MANXB";
        }

        //Phương thức đưa tác giả lên form.
        private void DuaTacGiaLenForm()
        {
            DataTable dt;
            clsTacGiaBUS TacGiaBUS;

            dt = new DataTable();
            TacGiaBUS = new clsTacGiaBUS();
            dt = TacGiaBUS.DanhSachTacGia();
            cbomatg.DataSource = dt;
            cbomatg.DisplayMember = "TENTG";
            cbomatg.ValueMember = "MATG";
        }

        //Phương thức đưa ngôn ngữ lên form.
        private void DuaNgonNguLenForm()
        {
            DataTable dt;
            clsNgonNguBUS NgonNguBUS;

            dt = new DataTable();
            NgonNguBUS = new clsNgonNguBUS();
            dt = NgonNguBUS.DanhSachNgonNgu();
            cbongonngu.DataSource = dt;
            cbongonngu.DisplayMember = "TENNN";
            cbongonngu.ValueMember = "MANN";
        }

        //Phương thức đưa kệ lên form.
        private void DuaKeLenForm()
        {
            DataTable dt;
            clsViTriLuuBUS ViTriLuuBUS;

            dt = new DataTable();
            ViTriLuuBUS = new clsViTriLuuBUS();
            dt = ViTriLuuBUS.DanhSachViTriLuu();
            cboke.DataSource = dt;
            cboke.DisplayMember = "KE";
            cboke.ValueMember = "MAVT";
        }

        //Phương thức đưa thể loại lên form.
        private void DuaTheLoaiLenForm()
        {
            DataTable dt;
            clsTheLoaiBUS TheLoaiBUS;

            dt = new DataTable();
            TheLoaiBUS = new clsTheLoaiBUS();
            dt = TheLoaiBUS.DanhSachTheLoai();
            cbotheloai.DataSource = dt;
            cbotheloai.DisplayMember = "TENTL";
            cbotheloai.ValueMember = "MATL";
        }

        //Đưa dữ liệu lên tất cả các combobox của form.
        private void LoadAllComboBox()
        {
            DuaTinhTrangLenForm();
            DuaNhaXuatBanLenForm();
            DuaTacGiaLenForm();
            DuaNgonNguLenForm();
            DuaKeLenForm();
            DuaTheLoaiLenForm();
        }
        #endregion

        #region Phương thức lấy hình

        private void LayHinh()
        {
            DialogResult dlr = new DialogResult();
            openfdl.InitialDirectory = Application.StartupPath;
            dlr = openfdl.ShowDialog();
            string filename;

            try
            {
                if (dlr != DialogResult.Cancel)
                {
                    String url;
                    url = Application.StartupPath + @"\HinhSach\" + Path.GetFileName(openfdl.FileName);
                    pchinh.ImageLocation = url; //Gán hình vào PictureBox.
                    filename = openfdl.FileName;

                    int vitri = 0;
                    vitri = filename.LastIndexOf(@"\");
                    filename = filename.Remove(0, vitri + 1);

                    //Nếu hình ko tồn tại trong thư mục hiện hành hình copy hình vào thư mục hiện hành.
                    if (!File.Exists(Application.StartupPath + @"\HinhSach\" + Path.GetFileName(openfdl.FileName)))
                        File.Copy(openfdl.FileName, Application.StartupPath + @"\HinhSach\" + Path.GetFileName(openfdl.FileName), true);
                }
            }
            catch
            {
                DevComponents.DotNetBar.MessageBoxEx.Show("-Hình đang được ứng dụng khác sử dụng!!\n\n-Có thể: \n\n  +Copy hình sang thư mục khác và thử lại\n\n  +Hoặc chọn hình khác",
                                                     "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        #endregion

        #region Các phương thức tạo mã tự động

        //Tạo mã sách.
        public String DinhdangMACHSach(String MACH)
        {
            if (MACH.Length == 1)
                MACH = "S00" + MACH;
            else if (MACH.Length == 2)
                MACH = "S0" + MACH;
            else if (MACH.Length == 3)
                MACH = "S" + MACH;
            return MACH;
        }

        private int TimMaCauHoiSach()
        {
            int sl = 1;
            int dem = 0;
            tbl = ThuThuBUS.SachBUS.DanhSachSachReference();
            foreach (DataRow dr in tbl.Rows)
            {
                int ma1 = Convert.ToInt16(Tim_CatChuoiSach(dr["DKCB"].ToString()));
                dem++;
                int ma2 = Convert.ToInt16(Tim_CatChuoiSach(dr["DKCB"].ToString()));

                if (dem != ma2)
                {
                    return dem;
                }
                else
                {
                    sl++;
                }

            }
            return sl;
        }


        public String Tim_CatChuoiSach(String Chuoicantim)
        {
            int vitri = 0;
            vitri = Chuoicantim.IndexOf(Chuoicantim, 0);
            if (vitri != -1)
                Chuoicantim = Chuoicantim.Remove(0, 1);
            return Chuoicantim;
        }
        //--------------------------------------------------

        //Tạo mã tựa sách.
        public String DinhdangMACHTuaSach(String MACH)
        {
            if (MACH.Length == 1)
                MACH = "TS00" + MACH;
            else if (MACH.Length == 2)
                MACH = "TS0" + MACH;
            else if (MACH.Length == 3)
                MACH = "TS" + MACH;
            return MACH;
        }

        private int TimMaCauHoiTuaSach()
        {
            int sl = 1;
            int dem = 0;
            tbl = ThuThuBUS.TuaSachBUS.DanhSachTuaSach();
            foreach (DataRow dr in tbl.Rows)
            {
                int ma1 = Convert.ToInt16(Tim_CatChuoiTuaSach(dr["MATUASACH"].ToString()));
                dem++;
                int ma2 = Convert.ToInt16(Tim_CatChuoiTuaSach(dr["MATUASACH"].ToString()));

                if (dem != ma2)
                {
                    return dem;
                }
                else
                {
                    sl++;
                }

            }
            return sl;
        }


        public String Tim_CatChuoiTuaSach(String Chuoicantim)
        {
            int vitri = 0;
            vitri = Chuoicantim.IndexOf(Chuoicantim, 0);
            if (vitri != -1)
                Chuoicantim = Chuoicantim.Remove(0, 2);
            return Chuoicantim;
        }

        #endregion

        #region Các phương thức thêm, sửa, xóa

        //Phương thức sửa sách.
        private bool SuaTuaSach(clsTuaSachDTO TuaSachDTO)
        {
            TuaSachBUSResult TuaSachResult;

            TuaSachResult = TuaSachBUSResult.OK;
            TuaSachResult = ThuThuBUS.TuaSachBUS.SuaTuaSach(TuaSachDTO);
            if (TuaSachResult == TuaSachBUSResult.OK) //Nếu sửa thành công.
                return true;
            return false;
        }

        //Phương thức sửa sách.
        private bool SuaSach(clsSachDTO SachDTO)
        {
            SachBUSResult SachResult;

            SachResult = SachBUSResult.OK;
            SachResult = ThuThuBUS.SachBUS.SuaSach(SachDTO); //Gọi phượng thức sửa dữ liệu.
            if (SachResult == SachBUSResult.OK) //Nếu thêm sách thành công.
                return true;
            return false;
        }

        //Phương thức sửa một quyển sách.
        private void SuaMotQuyenSach()
        {
            clsTuaSachDTO TuaSachDTO;
            clsSachDTO SachDTO;
            bool check;
            bool checkSuaTuaSach;
            bool checkSuaSach;

            //Kiểm tra dữ liệu rỗng.
            check = false;
            check = KiemTraDuLieuRong();
            if (!check)
                return;
            //-------------------------------

            //Lấy dữ liệu tựa sách từ form.
            TuaSachDTO = new clsTuaSachDTO();
            TuaSachDTO = LayTuaSachTuForm();
            TuaSachDTO.MaTuaSach = MaTuaSachTrenForm;
            //-------------------------------

            //Kiểm tra quy định dữ liệu tựa sách hợp lệ.
            check = false;
            check = KiemTraQuyDinhDuLieu(TuaSachDTO);
            if (!check)
                return;
            //-------------------------------

            //Sửa tựa sách.
            checkSuaTuaSach = false;
            checkSuaTuaSach = SuaTuaSach(TuaSachDTO);
            //-------------------------------

            //Lấy dữ liệu sách từ form.
            SachDTO = new clsSachDTO();
            SachDTO = LaySachTuForm();
            SachDTO.DKCB = MaSachTrenForm;
            SachDTO.MaTuaSach = MaTuaSachTrenForm;
            //-------------------------------

            //Sửa sách.
            checkSuaSach = false;
            checkSuaSach = SuaSach(SachDTO);
            //-------------------------------

            if (checkSuaTuaSach && checkSuaSach)
                DevComponents.DotNetBar.MessageBoxEx.Show("Cập nhật thành công!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            else
                DevComponents.DotNetBar.MessageBoxEx.Show("Không cập nhật được!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);

            RefreshForm(); //Refresh form.
            btnsua.Text = "Sửa";
        }

        //Phương thức thêm sách mới.
        private void ThemSachMoi()
        {
            clsTuaSachDTO TuaSachDTO;
            clsSachDTO SachDTO;
            bool check;
            bool checkThemTuaSach;
            bool checkThemSach;

            //Kiểm tra dữ liệu rỗng.
            check = false;
            check = KiemTraDuLieuRong();
            if (!check)
                return;
            //-------------------------------

            //Lấy dữ liệu tựa sách từ form.
            TuaSachDTO = new clsTuaSachDTO();
            TuaSachDTO = LayTuaSachTuForm();
            //-------------------------------

            //Kiểm tra quy định dữ liệu tựa sách hợp lệ.
            check = false;
            check = KiemTraQuyDinhDuLieu(TuaSachDTO);
            if (!check)
                return;
            //-------------------------------

            //Thêm tựa sách.
            checkThemTuaSach = false;
            checkThemTuaSach = ThemTuaSach(TuaSachDTO);
            //-------------------------------

            //Lấy dữ liệu sách từ form.
            SachDTO = new clsSachDTO();
            SachDTO = LaySachTuForm();
            //-------------------------------

            //Thêm sách.
            checkThemSach = false;
            checkThemSach = ThemSach(TuaSachDTO, SachDTO);
            //-------------------------------

            if (checkThemTuaSach && checkThemSach)
                DevComponents.DotNetBar.MessageBoxEx.Show("Thêm thành công!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            else
                DevComponents.DotNetBar.MessageBoxEx.Show("Không thêm được!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);

            RefreshForm(); //Refresh form.
            btnthem.Text = "Thêm";
        }

        //Phương thức thêm tựa sách.
        private bool ThemTuaSach(clsTuaSachDTO TuaSachDTO)
        {
            TuaSachBUSResult TuaSachResult;

            TuaSachResult = TuaSachBUSResult.OK;
            TuaSachResult = ThuThuBUS.TuaSachBUS.ThemTuaSach(TuaSachDTO);
            if (TuaSachResult == TuaSachBUSResult.OK) //Nếu sửa thành công.
                return true;
            return false;
        }

        //Phương thức thêm sách.
        private bool ThemSach(clsTuaSachDTO TuaSachDTO, clsSachDTO SachDTO)
        {
            SachBUSResult SachResult;

            SachResult = SachBUSResult.OK;
            for (int i = 0; i < TuaSachDTO.SoLuong; i++)
            {
                SachDTO.DKCB = DinhdangMACHSach(TimMaCauHoiSach().ToString());
                SachResult = ThuThuBUS.SachBUS.ThemSach(SachDTO); //Gọi phượng thức sửa dữ liệu.
            }
            //----------------------------------------------

            if (SachResult == SachBUSResult.OK) //Nếu thêm sách thành công.
                return true;
            return false;
        }

        //Phương thức xóa sách.
        private void XoaSach()
        {
            DialogResult dlg = new DialogResult(); //Hỏi trước khi xóa.
            SachBUSResult rs = SachBUSResult.OK;

            dlg = DevComponents.DotNetBar.MessageBoxEx.Show(this, "Chắc chắn xóa không ?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Error);
            if (dlg == DialogResult.Yes) //Nếu chọn xóa.
            {
                DataGridViewSelectedRowCollection RowCollectTion;

                RowCollectTion = dgvtuasach.SelectedRows;
                foreach (DataGridViewRow Row in RowCollectTion)
                {
                    DataGridViewCellCollection Cells;
                    
                    Cells = Row.Cells;
                    SachDTO.DKCB = Cells["DKCB"].Value.ToString();
                    rs = ThuThuBUS.SachBUS.XoaSach(SachDTO); //Gọi phương thức xóa.
                }

                if (rs == SachBUSResult.OK) //Nếu xóa thành công.
                    DevComponents.DotNetBar.MessageBoxEx.Show(this, "Xóa thành công!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                else //Nếu xóa thất bại.
                    DevComponents.DotNetBar.MessageBoxEx.Show("Không xóa được!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                RefreshForm(); //Refresh form.
            }
        }
        #endregion

        #region Các phương thức kiểm tra, đặt giá trị mặc định, refresh data

        //Phương thức đặt giá trị mặc định cho các TextBox số và text ngày.
        private void SetDefaultValue()
        {
            if (txtgia.Text.Trim().Equals(""))
                txtgia.Text = "0";
            if (txtsoluong.Text.Trim().Equals(""))
                txtsoluong.Text = "0";
            if (txtsotrang.Text.Trim().Equals(""))
                txtsotrang.Text = "0";
            if (txtnamxb.Text.Trim().Equals(""))
                txtnamxb.Text = "0";
            if (dtngaynhap.Text.Equals(""))
                dtngaynhap.Text = DateTime.Today.ToShortDateString();

        }

        //Phương thức Kiểm tra dữ liệu rỗng.
        private bool KiemTraDuLieuRong()
        {
            if (txttentuasach.Text.Trim() == "")
            {
                DevComponents.DotNetBar.MessageBoxEx.Show("Tên tựa sách không được rỗng!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txttentuasach.Focus();
                return false;
            }
            return true;
        }

        //Phương thức Kiểm tra quy định dữ liệu.
        private bool KiemTraQuyDinhDuLieu(clsTuaSachDTO obj)
        {
            TuaSachBUSResult rs;

            rs = TuaSachBUS.KiemTraQuyDinh(obj);
            if (rs == TuaSachBUSResult.GIAERROR)
            {
                DevComponents.DotNetBar.MessageBoxEx.Show("Giá quyển sách phải lớn hơn 0!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtgia.Focus();
                txtgia.SelectAll();
                return false;
            }
            if (rs == TuaSachBUSResult.SOLUONGERROR)
            {
                DevComponents.DotNetBar.MessageBoxEx.Show("Số lượng sách nhập phải lớn hơn 0!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtsoluong.Focus();
                txtsoluong.SelectAll();
                return false;
            }
            if (rs == TuaSachBUSResult.SOTRANGERROR)
            {
                DevComponents.DotNetBar.MessageBoxEx.Show("Số trang của quyển sách phải lớn hơn 0!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtsotrang.Focus();
                txtsotrang.SelectAll();
                return false;
            }
            if (rs == TuaSachBUSResult.NAMXBERROR)
            {
                DevComponents.DotNetBar.MessageBoxEx.Show("Năm xuất bản phải lớn hơn 0!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtnamxb.Focus();
                txtnamxb.SelectAll();
                return false;
            }
            return true;
        }

        //Phương thức Refresh lại form.
        private void RefreshForm()
        {
            LoadForm();
        }
        #endregion

        #region Các phương thức ẩn-hiện Button, Textbox, Tạo cột cho DataGrid.

        //(Ẩn/hiện) Button.
        private void HienThiButton(bool dieukien)
        {
            btnthem.Enabled = dieukien;
            btnsua.Enabled = dieukien;
            btnxoa.Enabled = dieukien;
            btnluu.Enabled = dieukien;
            btnchonhinh.Enabled = dieukien;
            dgvtuasach.Enabled = dieukien;
        }

        //(Ẩn/hiện) TextBox.
        private void HienThiTextBox(bool a)
        {
            txttentuasach.Enabled = a;
            txtgia.Enabled = a;
            dtngaynhap.Enabled = a;
            txtsoluong.Enabled = a;
            txtsotrang.Enabled = a;
            txtnamxb.Enabled = a;
            cbotrangthai.Enabled = a;
            cbosachhong.Enabled = a;
            cbotheloai.Enabled = a;
            cbonhxb.Enabled = a;
            cbomatg.Enabled = a;
            cbongonngu.Enabled = a;
            cboke.Enabled = a;
            txttomtat.Enabled = a;
        }

        //Xóa TextBox.
        private void XoaTextBox()
        {
            txttentuasach.Text = "";
            txtgia.Text = "";
            dtngaynhap.Text = "";
            txtsoluong.Text = "";
            txtsotrang.Text = "";
            txtnamxb.Text = "";
            cbotrangthai.SelectedIndex = 0;
            cbosachhong.SelectedIndex = 0;
            cbotheloai.SelectedIndex = 0;
            cbonhxb.SelectedIndex = 0;
            cbomatg.SelectedIndex = 0;
            cbongonngu.SelectedIndex = 0;
            cboke.SelectedIndex = 0;
            txttomtat.Text = "";
        }

        //Tạo cột cho GridView
        private void TaoCotGridView()
        {
            dgvtuasach.Columns["DKCB"].HeaderCell.Value = "Mã tựa sách";
            dgvtuasach.Columns["TENTUASACH"].HeaderCell.Value = "Tên tựa sách";
            dgvtuasach.Columns["GIA"].HeaderCell.Value = "Giá";
            dgvtuasach.Columns["NGAYNHAP"].HeaderCell.Value = "Ngày nhập";
            dgvtuasach.Columns["SOLUONG"].HeaderCell.Value = "Số lượng";
            dgvtuasach.Columns["SOTRANG"].HeaderCell.Value = "Số trang";
            dgvtuasach.Columns["NAMXB"].HeaderCell.Value = "Năm XB";
            dgvtuasach.Columns["TRANGTHAI"].HeaderCell.Value = "Trạng thái";
            dgvtuasach.Columns["TENHONG"].HeaderCell.Value = "Tình trạng";
            dgvtuasach.Columns["TENTL"].HeaderCell.Value = "Thể loại";
            dgvtuasach.Columns["TENNXB"].HeaderCell.Value = "Nhà XB";
            dgvtuasach.Columns["GIA"].HeaderCell.Value = "Giá";
            dgvtuasach.Columns["TENTG"].HeaderCell.Value = "Tác giả";
            dgvtuasach.Columns["TENNN"].HeaderCell.Value = "Ngôn ngữ";
            dgvtuasach.Columns["KE"].HeaderCell.Value = "Kệ";
            dgvtuasach.Columns["TOMTAT"].HeaderCell.Value = "Tóm tắt";
            //dgvtuasach.Columns["HINHANH"].HeaderCell.Value = "Hình ảnh";
            dgvtuasach.Columns["HINHANH"].Visible = false;
            dgvtuasach.Columns["MATUASACH"].Visible = false;

        }
        #endregion

        #region Các phương thức thay đổi nút, chữ trên nút.

        //Khi nhấn nút thêm.
        private void NutThem()
        {
            btnthem.Text = "Hủy Bỏ";
            HienThiButton(false); //Ẩn tất cả các button.
            btnthem.Enabled = true;
            btnluu.Enabled = true;
            btnchonhinh.Enabled = true;

            HienThiTextBox(true); //Hiển thị các textbox.
            XoaTextBox();
            //txtmasach.Text = DinhdangMACHSach(TimMaCauHoiSach().ToString()); //Tạo mã tự động.
            txttentuasach.Focus();
            pchinh.ImageLocation = null;
            LoadAllComboBox();
            cbongonngu.SelectedIndex = 2;
            SetDefaultValue();
        }

        //Khi nhấn nút hủy bỏ thêm.
        private void NutHuyBoThem()
        {
            btnthem.Text = "Thêm";
            HienThiButton(false); //Ẩn tất cả các button.
            btnthem.Enabled = true;
            btnsua.Enabled = true;
            btnxoa.Enabled = true;

            HienThiTextBox(false); //Hiển thị các textbox.
            RefreshForm();
        }

        //Khi nhấn nút sửa.
        private void NutSua()
        {
            btnsua.Text = "Hủy Bỏ";
            HienThiButton(false); //Ẩn tất cả các button.
            btnsua.Enabled = true;
            btnluu.Enabled = true;
            btnchonhinh.Enabled = true;

            HienThiTextBox(true); //Hiển thị các textbox.
            txtmasach.Enabled = false;
            LoadAllComboBox();
        }

        //Khi nhấn nút hủy bỏ sửa.
        private void NutHuyBoSua()
        {
            btnsua.Text = "Sửa";
            HienThiButton(false); //Ẩn tất cả các button.
            btnsua.Enabled = true;
            btnthem.Enabled = true;
            btnxoa.Enabled = true;

            HienThiTextBox(false);
            RefreshForm();
        }
        #endregion

        #region Các phương thức lấy dữ liệu từ form.

        //Phương thức Lấy dữ liệu Sách từ trên form.
        private clsSachDTO LaySachTuForm()
        {
            clsSachDTO SachDTO;

            SachDTO = new clsSachDTO();
            SachDTO.DKCB = DinhdangMACHSach(TimMaCauHoiSach().ToString());
            SachDTO.MaHong = cbosachhong.SelectedValue.ToString().Trim();
            SachDTO.MaTuaSach = MaTuaSachThemMoi;
            SachDTO.MaVT = cboke.SelectedValue.ToString().Trim();
            SachDTO.TrangThai = cbotrangthai.SelectedItem.ToString().Trim();

            return SachDTO;
        }

        //Phương thức Lấy dữ liệu tựa sách từ form.
        private clsTuaSachDTO LayTuaSachTuForm()
        {
            clsTuaSachDTO TuaSachDTO;

            TuaSachDTO = new clsTuaSachDTO();
            TuaSachDTO = new clsTuaSachDTO();
            TuaSachDTO.MaTuaSach = DinhdangMACHTuaSach(TimMaCauHoiTuaSach().ToString());
            MaTuaSachThemMoi = TuaSachDTO.MaTuaSach;
            TuaSachDTO.TenTuaSach = txttentuasach.Text.Trim();
            TuaSachDTO.Gia = Convert.ToInt64(txtgia.Text.Trim());
            TuaSachDTO.MaTL = cbotheloai.SelectedValue.ToString().Trim();
            TuaSachDTO.MaNXB = cbonhxb.SelectedValue.ToString().Trim();
            TuaSachDTO.MaTG = cbomatg.SelectedValue.ToString().Trim();
            TuaSachDTO.MaNN = cbongonngu.SelectedValue.ToString().Trim();
            TuaSachDTO.TomTat = txttomtat.Text.Trim();
            TuaSachDTO.NgayNhap = Convert.ToDateTime(dtngaynhap.Text);
            TuaSachDTO.SoLuong = Convert.ToInt32(txtsoluong.Text);
            TuaSachDTO.SoTrang = Convert.ToInt32(txtsotrang.Text);
            TuaSachDTO.NamXB = Convert.ToInt32(txtnamxb.Text);
            //Lấy hình.
            if (pchinh.ImageLocation != null)
            {
                int HinhSach;
                String filename;

                filename = pchinh.ImageLocation;
                HinhSach = filename.IndexOf("HinhSach");
                TuaSachDTO.HinhAnh = pchinh.ImageLocation.Substring(HinhSach);
            }
            else
            {
                TuaSachDTO.HinhAnh = "";
            }

            return TuaSachDTO;
        }
        #endregion

        //Events
        #region Các sự kiện trên form.
        private void FrmSach_Load(object sender, EventArgs e)
        {
            LoadForm(); //Gọi phương thức đưa dữ liệu lên form.
        }

        private void dgvtuasach_SelectionChanged(object sender, EventArgs e)
        {
            if (dgvtuasach.SelectedRows.Count > 0) //Nếu trong DataGrid có từ 1 dòng trở lên.
            {
                MaSachTrenForm = dgvtuasach.SelectedRows[0].Cells["DKCB"].Value.ToString();
                MaTuaSachTrenForm = dgvtuasach.SelectedRows[0].Cells["MATUASACH"].Value.ToString().Trim();

                txtmasach.Text = dgvtuasach.SelectedRows[0].Cells["DKCB"].Value.ToString(); //Chọn dòng đầu tiên, ô thứ 1.
                txttentuasach.Text = dgvtuasach.SelectedRows[0].Cells["TENTUASACH"].Value.ToString(); //Chọn dòng đầu tiên, ô thứ 2.
                txtgia.Text = dgvtuasach.SelectedRows[0].Cells["GIA"].Value.ToString().Trim();
                dtngaynhap.Text = dgvtuasach.SelectedRows[0].Cells["NGAYNHAP"].Value.ToString().Trim();
                txtsoluong.Text = dgvtuasach.SelectedRows[0].Cells["SOLUONG"].Value.ToString().Trim();
                txtsotrang.Text = dgvtuasach.SelectedRows[0].Cells["SOTRANG"].Value.ToString().Trim();
                txtnamxb.Text = dgvtuasach.SelectedRows[0].Cells["NAMXB"].Value.ToString().Trim();
                cbotrangthai.Text = dgvtuasach.SelectedRows[0].Cells["TRANGTHAI"].Value.ToString().Trim();
                cbosachhong.Text = dgvtuasach.SelectedRows[0].Cells["TENHONG"].Value.ToString().Trim();
                cbotheloai.Text = dgvtuasach.SelectedRows[0].Cells["TENTL"].Value.ToString().Trim();
                cbonhxb.Text = dgvtuasach.SelectedRows[0].Cells["TENNXB"].Value.ToString().Trim();
                txtgia.Text = dgvtuasach.SelectedRows[0].Cells["GIA"].Value.ToString().Trim();
                cbomatg.Text = dgvtuasach.SelectedRows[0].Cells["TENTG"].Value.ToString().Trim();
                cbongonngu.Text = dgvtuasach.SelectedRows[0].Cells["TENNN"].Value.ToString().Trim();
                cboke.Text = dgvtuasach.SelectedRows[0].Cells["KE"].Value.ToString().Trim();
                txttomtat.Text = dgvtuasach.SelectedRows[0].Cells["TOMTAT"].Value.ToString().Trim();
                String duongdanhinh = dgvtuasach.SelectedRows[0].Cells["HINHANH"].Value.ToString().Trim();

                // pchinh.Show();
                String url = Application.StartupPath + @"\" + duongdanhinh;
                if (System.IO.File.Exists(url))
                {
                    pchinh.ImageLocation = url;
                }
                else
                    pchinh.ImageLocation = null;
            }
        }

        private void btnthoat_Click(object sender, EventArgs e)
        {
            DialogResult dlg = new DialogResult();
            dlg = DevComponents.DotNetBar.MessageBoxEx.Show("Có muốn thoát không ?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (dlg == DialogResult.Yes)
            {
                this.Close();
            }
        }

        private void btnxoa_Click(object sender, EventArgs e)
        {
            SachDTO = new clsSachDTO(); //Khởi tạo đối tượng.
            //--------------------------------
            SachDTO.DKCB = txtmasach.Text.Trim(); //Lấy dữ liệu.
            //--------------------------------

            XoaSach(); //Gọi phương thức xóa sách.
        }

        private void btnthem_Click(object sender, EventArgs e)
        {
            if (btnthem.Text == "Thêm")
            {
                NutThem(); //Khi nhấn nút thêm.
            }
            else
            {
                NutHuyBoThem(); //Khi nhấn nút hủy bỏ thêm.
            }
        }

        private void btnsua_Click(object sender, EventArgs e)
        {
            if (btnsua.Text == "Sửa")
            {
                NutSua(); //Khi nhấn nút sửa.
            }
            else
            {
                NutHuyBoSua(); //Khi nhấn nút hủy bỏ sửa.
            }
        }

        private void btnluu_Click(object sender, EventArgs e)
        {
            SetDefaultValue(); //Gán dữ liệu mặc định cho các textbox có nội dung là số.
            if (btnthem.Enabled == true) //Lưu của nút thêm.
            {
                ThemSachMoi();
            }
            else //Lưu của nút sửa.
            {
                SuaMotQuyenSach(); //Gọi phương thức sửa thông tin sách.
            }
        }

        private void btnchonhinh_Click(object sender, EventArgs e)
        {
            LayHinh();
        }

        //Phương thức Làm cho các textbox chỉ nhập được số.
        private void txtgia_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsLetter(e.KeyChar) == true && char.IsControl(e.KeyChar) == false)
                e.Handled = true;
        }
        #endregion
    }
}